package design.decorator;

/**
 *
 * --------原始方法----开始-------------------
 * 用户服务接口：用户更新 userId = [1001]
 * --------装饰器A----开始-------------------
 * 装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ...
 * 用户服务接口：用户更新 userId = [1001]
 * 装饰器A - 针对用户修改方法 - 添加的包装   - end ... ...
 * 装饰器A - 针对用户服务 - 装饰的扩展方法   ... ...
 *
 * --------装饰器B----开始-------------------
 * 装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ...
 * 用户服务接口：用户更新 userId = [1001]
 * 装饰器B - 针对用户修改方法 - 添加的包装   - end ... ...
 * 装饰器B - 针对用户服务 - 装饰的扩展方法   ... ...
 *
 * --------装饰器A && 装饰器B----开始-------------------
 * 装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ...
 * 装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ...
 * 用户服务接口：用户更新 userId = [1001]
 * 装饰器A - 针对用户修改方法 - 添加的包装   - end ... ...
 * 装饰器B - 针对用户修改方法 - 添加的包装   - end ... ...
 * 装饰器B - 针对用户服务 - 装饰的扩展方法   ... ...
 *
 */
public class TestDesign {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();

        System.out.println("--------原始方法----开始-------------------");
        userService.updateUserInfo(1001L);

        DecoratorA decoratorA = new DecoratorA(userService);
        System.out.println("--------装饰器A----开始-------------------");
        decoratorA.updateUserInfo(1001L);
        decoratorA.methodA();

        DecoratorB decoratorB = new DecoratorB(userService);
        System.out.println("--------装饰器B----开始-------------------");
        decoratorB.updateUserInfo(1001L);
        decoratorB.methodB();

        decoratorB = new DecoratorB(decoratorA);
        System.out.println("--------装饰器A && 装饰器B----开始-------------------");
        decoratorB.updateUserInfo(1001L);
        decoratorB.methodB();
    }
}
